﻿Namespace HybrisItems.Model

    ''' <summary>
    ''' Defines an attribute of a type.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class AttributeModel

        ''' <summary>
        ''' Configures a default value for this attribute used if no value is provided. 
        ''' The default value is calculated by initialization and will not be re-calculated by runtime.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Defaultvalue As String

        ''' <summary>
        ''' Gives a description for this attribute only used for the javadoc of generated attribute methods.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description As String

        ''' <summary>
        ''' Defines how the values of the attribute will be stored. Possible values: 'cmp' (deprecated), 'jalo' (not persistent), and 'property' (persistent).
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Persistence As PersistenceModel

        ''' <summary>
        ''' Configures advanced settings for this attribute definition.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Modifiers As ModifiersModel

        ''' <summary>
        ''' Allows to configure custom properties for this attribute.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CustomProperties As CustomPropertiesModel

        ''' <summary>
        ''' Allows to configure model generation settings for this attribute. Models are used by the hybris ServiceLayer.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AttributeModel As AttributeModelModel

        ''' <summary>
        ''' Lets you re-define the attribute definition from an inherited type. 
        ''' In essence, you can use a different type of attribute as well as different modifier combinations than on the supertype. 
        ''' Default is 'false'.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Redeclare As Boolean

        ''' <summary>
        ''' Qualifier of this attribute. Attribute qualifiers	must be unique across a single type.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Qualifier As String

        ''' <summary>
        ''' The type of the attribute, such as 'Product', 'int' or 'java.lang.String'. 
        ''' Primitive java types will be mapped to the corresponding atomic type. 
        ''' For example: 'int' will be mapped to the atomic type 'java.lang.Integer' with implicit default value.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Type As String

        ''' <summary>
        ''' Advanced setting. Specifies the metatype for the attributes definition. 
        ''' Must be a type extending AttributeDescriptor. Default is 'AttributeDescriptor'.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MetaType As String

        ''' <summary>
        ''' If 'true', the attribute descriptor will be created during initialization. Default is 'true'.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AutoCreate As Boolean

        ''' <summary>
        ''' If 'true', getter and setter methods for this attribute will be generated during a hybris Suite build. 
        ''' Default is 'true'.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Generate As Boolean

        ''' <summary>
        ''' References an attribute of the same type. 
        ''' Only values of the referenced attribute can be selected	as values for this attribute. 
        ''' Typical example: the default delivery address of a customer must be one of the addresses set for the customer. Default is 'false'.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IsSelectionOf As String

    End Class

End Namespace
